package com.example.appstudy2405;
import android.Manifest;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class MainActivityButton extends AppCompatActivity implements View.OnClickListener {

    final String LOG_TAG = "LRCFileCollector";
    private static final int REQUEST_CODE_STORAGE_PERMISSION = 100;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_button);

        // 方法二：设置一个独立的匿名内部类监听器
        findViewById(R.id.bt2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivityButton.this, "你按了 bt2 ...", Toast.LENGTH_SHORT).show();

            }
        });

        // 方法三：Activity实现（继承）OnClickListener接口）
        findViewById(R.id.bt3).setOnClickListener(this);
        findViewById(R.id.bt4).setOnClickListener(this);
    }

    // 方法一：如果希望保持代码结构简洁，并且每个按钮的点击事件处理逻辑相对简单，您也可以为每个按钮定义一个公共的onClick方法，并在XML布局文件中为每个按钮指定该方法：
    // android:onClick="click1"
    public void click1(View view) {
        Toast.makeText(this, "你按了按钮1 ---------", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onClick(View view) {
        if (view.getId() == R.id.bt3) {
            Toast.makeText(this, "你按了按钮3", Toast.LENGTH_SHORT).show();
        } else if (view.getId() == R.id.bt4) {
            Toast.makeText(this, "你按了按钮4", Toast.LENGTH_SHORT).show();
//            readFiles();
            String[] lrcFilesPath = getLrcFilesPath();
            for (String s : lrcFilesPath) {
                Log.i(LOG_TAG, "Path: " + s);
            }
        }

    }


    private String[] getLrcFilesPath() {
        // 获取外部存储根目录下的Documents/NCE1路径
        String dirPath = Environment.getExternalStorageDirectory() + "/Documents/NCE1";

        // 调用方法收集所有以.lrc结尾的文件路径
        String[] filesPath = getLRCFilePaths(dirPath);

        // 遍历并打印收集到的文件路径，同时演示如何用File对象表示文件
        for (String path : filesPath) {
            Log.i(LOG_TAG, "LRC文件路径: " + path);

            // 使用File对象表示文件，此处仅为演示，实际操作如读取文件内容需进一步实现
            File lrcFile = new File(path);
            if (lrcFile.exists()) {
                Log.i(LOG_TAG, "文件存在，可以通过File对象进行操作");
            } else {
                Log.e(LOG_TAG, "文件不存在: " + path);
            }
        }
        return filesPath;
    }


    /**
     * 收集指定目录下所有以.lrc为扩展名的文件路径。
     *
     * @param directoryPath 目标目录的路径
     * @return 包含所有.lrc文件路径的字符串数组
     */
    public String[] getLRCFilePaths(String directoryPath) {
        // 使用List来动态存储找到的文件路径
        List<String> filePaths = new ArrayList<>();

        // 获取目录对象
        File directory = new File(directoryPath);

        // 检查目录是否存在且确实是一个目录
        if (!directory.exists() || !directory.isDirectory()) {
            Log.e(LOG_TAG, "目录不存在或不是一个有效的目录: " + directoryPath);
            return new String[0];
        }

        // 获取目录中的所有文件和子目录
        File[] files = directory.listFiles();

        // 遍历文件列表
        if (files != null) {
            for (File file : files) {
                // 检查是否为文件且文件名为.lrc结尾
                if (file.isFile() && file.getName().toLowerCase().endsWith(".lrc")) {
                    // 添加到路径列表
                    filePaths.add(file.getAbsolutePath());
                }
            }
        }

        // 将List转换为数组并返回
        return filePaths.toArray(new String[0]);
    }



    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == REQUEST_CODE_STORAGE_PERMISSION) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // 权限被同意，可以访问存储了
                // 这里可以再次尝试读取文件操作
                Log.d("Demo", "权限被同意，可以访问存储了 -- ");
            } else {
                // 权限被拒绝，提示用户或处理拒绝的情况
                Toast.makeText(this, "需要存储权限才能读取文件", Toast.LENGTH_SHORT).show();
            }
        }
    }

}